#include<stdio.h>

void whatIsRefrence();
void valPass(int a);
void refPass(int &a);

void changeRefrenceValue();
void _change(int &a);

int main(){
    
    whatIsRefrence();

    changeRefrenceValue();

    return 0;
}

void changeRefrenceValue(){
    int x = 10;
    int &reX = x;
    reX = 100;
    printf("before change x=%d, reX=%d \r\n", x, reX);// before change x=100, reX=100
    _change(reX);
    printf("after change x=%d, rex=%d \r\n", x, reX);//after change x=200, rex=200说明引用传递会修改原值，其实就等于是在操作原值
}

void _change(int &a){
    a = 200;
    printf("change rex=%d \r\n", a); //change rex=200
}



// c++里面引用就是一个变量的别名，共用的是同一块地址空间
void whatIsRefrence(){
    int x = 10;
    int &reX = x;//定义一个引用变量reX
    printf("x=%d, &x=%p\r\n", x, &x);// x=10, &x=0x7ffeefbffdc8
    printf("reX=%d, &reX=%p\r\n", reX, &reX);// reX=10, &reX=0x7ffeefbffdc8 地址一样的哟
    valPass(x);
    refPass(reX);
}

void valPass(int a){
    printf("a=%d, &a=%p\r\n", a, &a);/// a=10, &a=0x7ffeefbffd9c 新地址，说明形参是新变量
}

void refPass(int &a){
    printf("a=%d, &a=%p\r\n", a, &a);// a=10, &a=0x7ffeefbffdc8 新地址，说明形参是新变量
}